<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
// function* generatorFn(){
//     yield 1;
//     yield 2;
//     yield 3;
// }

// let fn = generatorFn();

// console.log( fn.next());
// console.log( fn.next());
// console.log( fn.next());
// console.log( fn.next());
// console.log( fn.next());

function fn1(){
    return new Promise(resolve=>{
        setTimeout(()=>{
            resolve(1);
        },1000)
    })
}

function fn2(){
    return new Promise(resolve=>{
        setTimeout(()=>{
            resolve(2);
        },1000)
    })
}

function fn3(){
    return new Promise(resolve=>{
        setTimeout(()=>{
            resolve(3);
        },1000)
    })
}

// function* myfn(){
//     yield fn1();
//     yield fn2();
//     yield fn3();
// }

// let fn = myfn();
// fn.next().value.then(res=>{
//     console.log(res);
//     return fn.next().value;
// }).then(res=>{
//     console.log(res);
//     return fn.next().value;
// }).then(res=>{
//     console.log(res);
// })

// 自动执行generator函数
// function run(genFn){
//     let g = genFn();
//     function next(){
//         let result = g.next();
//         if(result.done){
//             // 执行完成
//             return result.value;
//         }else{
//             result.value.then(res=>{
//                 console.log(res);
//                 next();
//             })
//         }
//     }
//     next();
// }
// run(myfn);

// async 及 await 函数
// async function fn(){
//    let res1 =  await fn1();
//    console.log(res1);
//    let res2 = await fn2();
//    console.log(res2);
//    let res3 = await fn3();
//    console.log(res3);
// }
// fn();


// generator函数
// function fn(){
//     return generatorFn(function* (){
//         yield fn1();
//         yield fn2();
//         yield fn3();
//     })
// }
// fn();

// function generatorFn(genFn){
//     let fn = genFn();
//     function step(nextFn){
//         let next = nextFn();
//         if(next.done){
//             return next.value;
//         }else{
//             next.value.then(res=>{
//                 console.log(res);
//                 step(function(){
//                     return fn.next();
//                 })
//             })
//         }
//     }
//     step(function(){
//        return fn.next();
//     })
// }


// async function fn(){
//    let res1 =  await fn1();
//    console.log(res1);
//    let res2 = await fn2();
//    console.log(res2);
//    let res3 = await fn3();
//    console.log(res3);
// }
// fn();

function fn(){
    fn1().then(res1=>{
        console.log(res1);
        return fn2();
    }).then(res2=>{
        console.log(res2);
        return fn3();
    }).then(res3=>{
        console.log(res3);
    })
}
fn();




</script>
</html>